<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>函数作业</title>
    <style>
        pre {
            font-size: 20px;
        }
    </style>

</head>

<body>
    <script>
        // 1.定义函数有几种方式
        // 2.retrun关键字的意义-2种
        // 3.var和function关键字有什么特别功能？
        // 4.写出一个函数，功能为：传入 2 个值，则返回其中的最大值;请再写一个函数，传入 3 个值，返回其中的最大值
        // 5.请定义一个函数，输入一个N值，则计算出该值的阶乘，即：n! = 1*2*3*4*5*6*...*N
        // 6.提高题(非必做)：喇叭花数,喇叭花数的每一位数字的阶乘之和恰好等于它本身。abc = a! + b! + c!。用函数的方法寻找喇叭花数
        // 7.提高题(非必做)：以下代码的输出结果是什么？为什么？请分析

        //   var b = "boy";
        //   console.log(b);
        //   function fighting() {
        //     console.log(a);
        //     console.log(c);
        //     if (a === "apple") {
        //       a = "Alice";
        //     } else {
        //       a = "Ada";
        //     }
        //     console.log(a);
        //     var a = "Andy";
        //     middle();
        //     function middle() {
        //       console.log(c++);
        //       var c = 100;
        //       console.log(++c);
        //       small();
        //       function small() {
        //         console.log(a);
        //       }
        //     }
        //     var c = (a = 88);
        //     function bottom() {
        //       b = "baby";
        //       console.log(b);
        //     }
        //     bottom();
        //   }
        //   fighting();
        //   console.log(b);
    </script>

    <h1>1.</h1>
    <p>函数声明式、函数表达式</p>

    <h1>2.</h1>
    <p>使用`return`语句时，函数会立即停止执行，并返回指定的值。<br>调用函数时，一旦执行到 return 语句，就会立即退出函数。</p>

    <h1>3.</h1>
    <P> js 在编译阶段，函数声明和变量声明都会被处理：置于执行环境的顶部，且赋值会留在原地，这个过程称之为**提升**</P>

    <h1>4.</h1>
    <pre>
      function max(a, b) {
        if (a >= b) {
            return a;
        } else {
            return b;
        }
    }
    console.log(max(1, 2));

    function max3(a, b, c) {
        var Max = arguments[0];
        for (var i = 1; i < arguments.length; i++) {
            if (Max < arguments[i]) {
                Max = arguments[i];
            }
        }
        return Max;
    }
    console.log(max3(1, 2, 3));
    </pre>

    <h1>5.</h1>
    <pre>
      function jc(num) {
        var total = 1;
        for (var i = 1; i <= num; i++) {
            total *= i;
        }
        return total;
    }
    console.log(jc(5));
    </pre>

    <h1>6.</h1>
    <pre>function jc(num) {
          var total = 1;
         for (var i = 1; i <= num; i++) {
           total *= i;
       }
      return total;
       }

      for (var i = 999; i >= 100; i--) {
               var str = i.toString();

              var bai = Number(str.charAt(0));
              var ten = Number(str.charAt(1));
              var ge = Number(str.charAt(2));

         if (jc(bai) + jc(ten) + jc(ge) == i) {
                 console.log(i);
          }
       }</pre>

    <h1>7.</h1>
    <pre>
      boy  // 上一行是全局变量 var b = "boy";
      undefined //变量存在，但未赋值
      undefined //变量存在，但未赋值
      Ada // a是undefined === "apple"为flase 即为else {  a = "Ada";}
      NaN // 变量存在,但未赋值 即相当于console.log(undefined++);
      101 // ++c 先增后用 100+1=101 
      Andy // 前面有var a = "Andy";
      baby // 上一行有  b = "baby";
      baby //  b = "baby"; 变成了全局变量把全局变量 var b = "boy"给覆盖了；
    </pre>
</body>

</html>